package com.liangzai.context;

import com.liangzai.entity.PaymentChannelEntity;
import com.liangzai.factory.StrategyFactory;
import com.liangzai.mapper.PaymentChannelMapper;
import com.liangzai.strategy.PayStrategy;
import com.liangzai.utils.SpringUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author leiliang
 * @version 1.0
 * @Description 通过上下文获取具体的策略类
 * @date 2021/3/11 16:05
 */
@Component
public class PayContextStrategy {

    @Autowired
    PaymentChannelMapper paymentChannelMapper;

    /**
     * 枚举类的方式
     * @param payCode
     * @return
     */
    public String toPayHtml1(String payCode) {
        if (StringUtils.isEmpty(payCode)) {
            return "payCode 不能为空";
        }
        //使用策略工厂获取具体实现类   工厂进行初始化
        PayStrategy payStrategy = StrategyFactory.getPayStrategy(payCode);
        if (payStrategy == null) {
            return "没有找到具体策略实现";
        }
        return payStrategy.toPayHtml();
    }


    /**
     * 数据库的方式
     * @param payCode
     * @return
     */
    public String toPayHtml(String payCode) {
        if (StringUtils.isEmpty(payCode)) {
            return "payCode 不能为空";
        }
        //通过数据库方式获取
        PaymentChannelEntity channel = paymentChannelMapper.getPaymentChannel(payCode);
        if (channel == null) {
            return "没有查询到支付渠道";
        }
        //获取数据库中bean的id
        String channelId = channel.getStrategyBeanId();
        if (StringUtils.isEmpty(channelId)){
            return "没有查询到支付渠道策略类";
        }
        //渠道id获取到bean
        PayStrategy payStrategy = (PayStrategy) SpringUtils.getBean(channelId);
        return payStrategy.toPayHtml();
    }

}
